package com.itheima.weirpc.model;

import cn.hutool.core.util.StrUtil;
import com.itheima.weirpc.constant.RpcConstant;
import lombok.Data;

/**
 * ClassName: ServiceMetaInfo
 * Package: com.itheima.weirpc.model
 * Description:
 *封装服务的注册信息，包括服务名称、服务版本号、服务地址（域名和端口号）、服务分组等
 * @Author 看到风
 * @Create 2024/11/24 11:39
 * @Version 1.0
 */
@Data
public class ServiceMetaInfo {
    /**
     * 服务名称
     */
    private String serviceName;

    /**
     * 服务版本号
     */
//    private String serviceVersion = "1.0";
    private String serviceVersion = RpcConstant.DEFAULT_SERVICE_VERSION;

    /**
     * 服务域名
     */
    private String serviceHost;

    /**
     * 服务端口号
     */
    private Integer servicePort;

    /**
     * 服务分组（暂未实现）
     */
    private String serviceGroup = "default";

    /**
     * 需要给ServiceMetaInfo增加一些工具方法，用于获取服务注册键名、获取服务注册节点键名等。
     * 可以把版本号和分组邹放到服务键名中，就可以在查询时根据这些参数获取对应版本和分组的服务了。
     */
    /**
     * 获取服务名
     */
    public String getServiceKey(){
        //后续可扩展服务分组
        return String.format("%s:%s",serviceName,serviceVersion);
    }

    /**
     * 获取服务注册节点键名
     *
     * @return
     */
    public String getServiceNodeKey() {
        return String.format("%s/%s:%s", getServiceKey(), serviceHost, servicePort);
    }

    /**
     * 获取完整服务地址
     *
     * @return
     */
    public String getServiceAddress() {
        if (!StrUtil.contains(serviceHost, "http")) {
            return String.format("http://%s:%s", serviceHost, servicePort);
        }
        return String.format("%s:%s", serviceHost, servicePort);
    }
}
